package com.kcwx.common.utils.uuid;

import java.nio.charset.StandardCharsets;

/**
 * ID生成器工具类
 * 
 */
public class IdUtils {
	/**
	 * 获取随机UUID
	 * 
	 * @return 随机UUID
	 */
	public static String randomUUID() {
		return UUID.randomUUID().toString();
	}

	/**
	 * 简化的UUID，去掉了横线
	 * 
	 * @return 简化的UUID，去掉了横线
	 */
	public static String simpleUUID() {
		return UUID.randomUUID().toString(true);
	}

	/**
	 * 获取随机UUID，使用性能更好的ThreadLocalRandom生成UUID
	 * 
	 * @return 随机UUID
	 */
	public static String fastUUID() {
		return UUID.fastUUID().toString();
	}

	/**
	 * 简化的UUID，去掉了横线，使用性能更好的ThreadLocalRandom生成UUID
	 * 
	 * @return 简化的UUID，去掉了横线
	 */
	public static String fastSimpleUUID() {
		return UUID.fastUUID().toString(true);
	}
	
	public static Long getId() {
		String str = simpleUUID();
		byte[] byteArr = str.getBytes(StandardCharsets.UTF_8);
		int hashCodeV = UUID.nameUUIDFromBytes(byteArr).toString().hashCode();
		if (hashCodeV < 0) {// 有可能是负数
			hashCodeV = -hashCodeV;
		}
		//"%015d"的意思：0代表不足位数的补0，这样可以确保相同的位数，15是位数也就是要得到到的字符串长度是15，d代表数字。
		String string = "1"+String.format("%015d", hashCodeV);
		return Long.parseLong(string);
	}
	
	public static void main(String[] args) {
		System.out.println(randomUUID());
		System.out.println(simpleUUID());
		System.out.println(fastUUID());
		System.out.println(fastSimpleUUID());

		String str = simpleUUID();
		System.out.println(str);
		byte[] byteArr = str.getBytes(StandardCharsets.UTF_8);
		int hashCodeV = UUID.nameUUIDFromBytes(byteArr).toString().hashCode();
		if (hashCodeV < 0) {// 有可能是负数
			hashCodeV = -hashCodeV;
		}
		//"%015d"的意思：0代表不足位数的补0，这样可以确保相同的位数，15是位数也就是要得到到的字符串长度是15，d代表数字。
		String string = "1"+String.format("%014d", hashCodeV);
		System.out.println("string:");
		System.out.println(string);
		System.out.println(Long.parseLong(string));
	}

}
